NOTE
1.5 TCP KeepAlive
1. 为什么需要TCP KeepAlive TCP建立连接后,双方会进行数据交互。交互过程中如果任一方出现掉电、死机、异常重启等各种意外,另一方会一直保持这个连接,造成资源浪费 这就可以使用TCP的保活机制:TCP KeepAlive来解决这个问题 2. 什么是TCP KeepAlive 隔一段时间
这是历史学习笔记,可能存在过时或不完整的理解。
1. 为什么需要TCP KeepAlive
TCP建立连接后,双方会进行数据交互。交互过程中如果任一方出现掉电、死机、异常重启等各种意外,另一方会一直保持这个连接,造成资源浪费
这就可以使用TCP的保活机制:TCP KeepAlive来解决这个问题
2. 什么是TCP KeepAlive
隔一段时间给连接对端发送一个探测包,如果收到对方回应的 ACK,则认为连接还是存活的,在超过一定重试次数之后还是没有收到对方的回应,则丢弃该 TCP 连接
3. 应用层保活 vs TCP保活
- 默认配置和分布式服务的需求差异比较大;
- 调优难,往往需要修改操作系统参数,而这会影响一堆服务;
- 扩展难度大,比如很多分布式服务的心跳包会带数据;
- 只能检测连接的活性,而无法检测服务的可用性;
- 处理事件不方便,很多语言的标准库提供的 API 很难用;
- 没有收益,TCP 自带的保活相比应用层自己实现,没有效率优势;